///////////////////////////////////////////////////////////////////////////////////////////////////
#include "DockedTool.h"
#include "VisualizationManager.h"

///////////////////////////////////////////////////////////////////////////////////////////////////
DockedTool::DockedTool(VisualizationManagerBase* mng, QString title, Qt::DockWidgetArea area)
{
	myMng = mng;

	// Init UI.
	myDock = new QDockWidget(mng->GetMainWindow());
	myMng->GetMainWindow()->addDockWidget(area, myDock);
	myDock->installEventFilter(this);
	myDock->hide();
	myEnabled = false;

	myMenuAction = myMng->AddWindowMenuAction(title);
	QObject::connect(myMenuAction, SIGNAL(triggered(bool)), this, SLOT(SetEnabled(bool)));
}

///////////////////////////////////////////////////////////////////////////////////////////////////
DockedTool::~DockedTool()
{
}

///////////////////////////////////////////////////////////////////////////////////////////////////
void DockedTool::Enable()
{
	myEnabled = true;
	myDock->show();
}

///////////////////////////////////////////////////////////////////////////////////////////////////
void DockedTool::Disable()
{
	myDock->hide();
	myEnabled = false;
}

///////////////////////////////////////////////////////////////////////////////////////////////////
bool DockedTool::IsEnabled()
{
	return myEnabled;
}

///////////////////////////////////////////////////////////////////////////////////////////////////
void DockedTool::SetEnabled(bool enabled)
{
	if(enabled)
	{
		Enable();
	}
	else
	{
		Disable();
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////////
void DockedTool::Render()
{
	// Default render implementation: reroute to visualization manager.
	myMng->Render();
}

///////////////////////////////////////////////////////////////////////////////////////////////////
bool DockedTool::eventFilter(QObject *obj, QEvent *event)
{
	if (event->type() == QEvent::Close) 
	{
		Disable();
		myMenuAction->setChecked(false);
		return false;
	} 
	else 
	{
		// standard event processing
		return QObject::eventFilter(obj, event);
	}
}

